// 引入路由器对象
import router from '@/router'
// 引入nprogress插件
// @ts-ignore
import nprogress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'
import { GET_TOKEN } from './utils/toke'
import { storeToRefs } from 'pinia'
import useUserStore from './store/modules/user'
import pinia from './store'
// 取消加载的小圆球
nprogress.configure({ showSpinner: false })
// 注意：在应用App组件外使用仓库中的数据调用hook函数需要传递pinia作为参数
// 引入用户仓库获取控制登录对话框显示与隐藏的属性showLogin
const { showLogin } = storeToRefs(useUserStore(pinia))

// 全局前置路由守卫(路由鉴权,进度条)
router.beforeEach((to, from, next) => {
  // to:要跳转的路由对象
  // from:当前页面路由对象
  // next:放行函数
  // 开启进度条
  nprogress.start()
  // 路由鉴权根据用户仓库/本地存储存储中是否有token
  if (GET_TOKEN()) {
    // 有token用户已登录  放行
    next()
  } else {
    // 未登录 只可访问指定路由
    if (
      [
        'home',
        'hospital',
        'register',
        'detail',
        'notice',
        'close',
        'search',
        'wxlogin',
      ].includes(to.name as string)
    ) {
      next()
    } else {
      // 修改用户仓库中的showLogin显示登录对话框
      showLogin.value = true
      // 返回当前路由 并将用户要前往的路径作为query参数传递
      // 注意:
      // 1.要将当前路由原本存在的query参数也传递到当前路由中
      // 2.redirect要使用fullPath属性包含path+query参数
      next({
        name: from.name as string,
        query: {
          hoscode: from.query.hoscode,
          redirect: to.fullPath,
        },
      })
      // 关闭进度条
      nprogress.done()
    }
  }
  next()
})
// 全局后置路由守卫(更改页面标题)
router.afterEach((to) => {
  // to:要跳转的路由对象
  // from:当前页面路由对象
  // 关闭进度条
  nprogress.done()
  // 设置页面标题
  document.title = ('尚医通-' + to.meta.title) as string
})
